//https://leetcode.com/problems/most-common-word/

class Solution {
public:
    string mostCommonWord(string paragraph, vector<string>& banned) {
        
        
        
        
        map < string , bool > check ;
        map < string , int > count ; 
        for ( auto i : banned )
            check [ i ] = 1 ; 
        for (int i = 0 ; i <  paragraph.size() ; i ++  )
        {
            if ( paragraph [ i ]   == '.' or paragraph [ i] ==  '!' or paragraph [ i ]   == ',' or paragraph [ i ]   == '?' or  paragraph [ i ]   == ';'  or  paragraph [ i ]   == ':' or paragraph [ i ]   == '\'' )
                    paragraph [ i ]   = ' ' ; 
        }
        
        int n = paragraph.size() ;
        string word ; 
        for ( int i = 0 ; i <  paragraph.size() ;    )
        {
            if ( paragraph [ i ] == ' ' )
            {
                while ( i < n and  paragraph [ i ] == ' ' )
                    i++ ; 
                cout << word << endl ; 
                transform ( word.begin() , word.end() , word.begin() , ::tolower ) ;
                if ( check .find ( word )  == check.end() )
                         count [ word ] ++ ; 
                word.clear() ; 
            }
            else
            {
                word += paragraph [ i ] ;
                i++; 
            }
                
            
        }
        
        if ( !word.empty() )
        {
            transform ( word.begin() , word.end() , word.begin() , ::tolower ) ;
            if ( check .find ( word )  == check.end() )
                         count [ word ] ++ ; 
        }
        
        
        string ans ; 
        int maxi = 0 ; 
        for ( auto i : count )
        {
            
            if ( i.second > maxi )
            { 
              
                maxi = i.second ; 
                ans = i.first ; 
            }
        }
        
        
        
        return ans ; 
        
        
    }
};
